5750 // See MultiProcessor Specification Version 1.[14]
5751 
5752 struct mp {             // floating pointer
5753   uchar signature[4];           // "_MP_"
5754   void *physaddr;               // phys addr of MP config table
5755   uchar length;                 // 1
5756   uchar specrev;                // [14]
5757   uchar checksum;               // all bytes must add up to 0
5758   uchar type;                   // MP system config type
5759   uchar imcrp;
5760   uchar reserved[3];
5761 };
5762 
5763 struct mpconf {         // configuration table header
5764   uchar signature[4];           // "PCMP"
5765   ushort length;                // total table length
5766   uchar version;                // [14]
5767   uchar checksum;               // all bytes must add up to 0
5768   uchar product[20];            // product id
5769   uint *oemtable;               // OEM table pointer
5770   ushort oemlength;             // OEM table length
5771   ushort entry;                 // entry count
5772   uint *lapicaddr;              // address of local APIC
5773   ushort xlength;               // extended table length
5774   uchar xchecksum;              // extended table checksum
5775   uchar reserved;
5776 };
5777 
5778 struct mpproc {         // processor table entry
5779   uchar type;                   // entry type (0)
5780   uchar apicid;                 // local APIC id
5781   uchar version;                // local APIC verison
5782   uchar flags;                  // CPU flags
5783     #define MPBOOT 0x02           // This proc is the bootstrap processor.
5784   uchar signature[4];           // CPU signature
5785   uint feature;                 // feature flags from CPUID instruction
5786   uchar reserved[8];
5787 };
5788 
5789 struct mpioapic {       // I/O APIC table entry
5790   uchar type;                   // entry type (2)
5791   uchar apicno;                 // I/O APIC id
5792   uchar version;                // I/O APIC version
5793   uchar flags;                  // I/O APIC flags
5794   uint *addr;                  // I/O APIC address
5795 };
5796 
5797 
5798 
5799 
5800 // Table entry types
5801 #define MPPROC    0x00  // One per processor
5802 #define MPBUS     0x01  // One per bus
5803 #define MPIOAPIC  0x02  // One per I/O APIC
5804 #define MPIOINTR  0x03  // One per bus interrupt source
5805 #define MPLINTR   0x04  // One per system interrupt source
5806 
5807 
5808 
5809 
5810 
5811 
5812 
5813 
5814 
5815 
5816 
5817 
5818 
5819 
5820 
5821 
5822 
5823 
5824 
5825 
5826 
5827 
5828 
5829 
5830 
5831 
5832 
5833 
5834 
5835 
5836 
5837 
5838 
5839 
5840 
5841 
5842 
5843 
5844 
5845 
5846 
5847 
5848 
5849 
